package ca.mestevens.unity.utils; import java.util.List; import org.apache.maven.artifact.repository.ArtifactRepository; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugin.logging.Log; import org.apache.maven.project.MavenProject; import org.eclipse.aether.RepositorySystem; import org.eclipse.aether.RepositorySystemSession; import org.eclipse.aether.artifact.Artifact; import org.eclipse.aether.artifact.DefaultArtifact; import org.eclipse.aether.collection.CollectRequest; import org.eclipse.aether.graph.Dependency; import org.eclipse.aether.graph.DependencyFilter; import org.eclipse.aether.graph.DependencyNode; import org.eclipse.aether.repository.RemoteRepository; import org.eclipse.aether.resolution.ArtifactResult; import org.eclipse.aether.resolution.DependencyRequest; import org.eclipse.aether.resolution.DependencyResolutionException; import org.eclipse.aether.util.artifact.JavaScopes; public class DependencyGatherer { private MavenProject project; private Log log; protected List<RemoteRepository> projectRepos; protected RepositorySystem repoSystem; protected RepositorySystemSession repoSession; public DependencyGatherer(Log log, MavenProject project, List<RemoteRepository> projectRepos, RepositorySystem repoSystem, RepositorySystemSession repoSession) { this.log = log; this.project = project; this.projectRepos = projectRepos; this.repoSystem = repoSystem; this.repoSession = repoSession; } public String createAndroidPomDependencySection() throws MojoFailureException { String dependencies = ""; List<ArtifactResult> resolvedArtifacts = resolveArtifacts(); for (ArtifactResult resolvedArtifact : resolvedArtifacts) { Artifact artifact = resolvedArtifact.getArtifact(); if (artifact.getProperty("type", "").equals("aar")) { dependencies += "<dependency>"; dependencies += "<groupId>" + artifact.getGroupId() + "</groupId>"; dependencies += "<artifactId>" + artifact.getArtifactId() + "</artifactId>"; dependencies += "<version>" + artifact.getVersion() + "</version>"; dependencies += "<type>" + artifact.getProperty("type", "") + "</type>"; dependencies += "</dependency>"; } } return dependencies; } public String createXcodePomDependencySection() throws MojoFailureException { String dependencies = ""; List<ArtifactResult> resolvedArtifacts = resolveArtifacts(); for (ArtifactResult resolvedArtifact : resolvedArtifacts) { Artifact artifact = resolvedArtifact.getArtifact(); if (artifact.getProperty("type", "").equals("xcode-framework")) { dependencies += "<dependency>"; dependencies += "<groupId>" + artifact.getGroupId() + "</groupId>"; dependencies += "<artifactId>" + artifact.getArtifactId() + "</artifactId>"; dependencies += "<version>" + artifact.getVersion() + "</version>"; dependencies += "<type>" + artifact.getProperty("type", "") + "</type>"; dependencies += "</dependency>"; } } return dependencies; } public List<ArtifactResult> resolveArtifacts() throws MojoFailureException { CollectRequest collectRequest = new CollectRequest(); final Artifact mainArtifact = new DefaultArtifact(project.getArtifact().getId()); collectRequest.setRoot(new Dependency(mainArtifact, JavaScopes.COMPILE)); collectRequest.setRepositories(projectRepos); DependencyRequest dependencyRequest = new DependencyRequest().setCollectRequest(collectRequest); dependencyRequest.setFilter(new DependencyFilter() { public boolean accept(DependencyNode node, List<DependencyNode> parents) { Artifact nodeArtifact = node.getArtifact(); if (nodeArtifact.getGroupId().equals(mainArtifact.getGroupId()) && nodeArtifact.getArtifactId().equals(mainArtifact.getArtifactId())) { return false; } return true; } }); List<ArtifactResult> resolvedArtifacts; try { resolvedArtifacts = repoSystem.resolveDependencies(repoSession, dependencyRequest).getArtifactResults(); } catch (DependencyResolutionException e) { log.error("Could not resolve dependencies"); log.error(e.getMessage()); throw new MojoFailureException("Could not resolve dependencies"); } return resolvedArtifacts; } public String createPomRepositoriesSection() { String repositories = "<repositories>"; for(ArtifactRepository repository : project.getRemoteArtifactRepositories()) { repositories += "<repository>"; repositories += "<id>" + repository.getId() + "</id>"; repositories += "<url>" + repository.getUrl() + "</url>"; repositories += "</repository>"; } repositories += "</repositories>"; return repositories; } }